﻿using System;
using System.Collections.Generic;
using System.Web;  
using System.Text;
using System.Security.Cryptography;
using System.IO;

/// <summary>
///Cryptogram 的摘要说明
/// </summary>
public class Cryptogram
{
	public Cryptogram()
	{
		//
		//TODO: 在此处添加构造函数逻辑
		//
	}
    //默认密钥向量  
    private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
    /// DES加密字符串          
    /// 待加密的字符串  
    /// 加密密钥,要求为8位  
    /// 加密成功返回加密后的字符串，失败返回源串   
    public static string EncryptDES(string encryptString, string encryptKey)
    {
        try
        {
            byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
            byte[] rgbIV = Keys;
            byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
            DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            return Convert.ToBase64String(mStream.ToArray());
        }
        catch
        {
            return encryptString;
        }
    }
    ///   
    /// DES解密字符串          
    /// 待解密的字符串  
    /// 解密密钥,要求为8位,和加密密钥相同  
    /// 解密成功返回解密后的字符串，失败返源串  
    public static string DecryptDES(string decryptString, string decryptKey)
    {
        try
        {
            byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
            byte[] rgbIV = Keys;
            byte[] inputByteArray = Convert.FromBase64String(decryptString);
            DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            return Encoding.UTF8.GetString(mStream.ToArray());
        }
        catch
        {
            return decryptString;
        }
    }

    public static string EncryptDES(string encryptString)
    {
        return EncryptDES(encryptString, "zhaozhen");
    }

    public static string DecryptDES(string decryptString)
    {
        return DecryptDES(decryptString, "zhaozhen");
    }



    /// <summary>
    /// MD5加密
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string MD5(string str)
    {
        return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToUpper();
    }




    /// <summary>
    /// ERP加密算法
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string SHA256Encrypt(string str)
    {
        System.Security.Cryptography.SHA256 s256 = new System.Security.Cryptography.SHA256Managed();
        byte[] byte1 = s256.ComputeHash(Encoding.Default.GetBytes(str));
        s256.Clear();
        return BitConverter.ToString(byte1).Replace("-", "");
    }
}